home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / cabal.c < prev    next >
C/C++ Source or Header  |  1999-12-13  |  3KB  |  107 lines

  1. /***************************************************************************
  2.  
  3.   vidhrdw.c
  4.  
  5.   Functions to emulate the video hardware of the machine.
  6.  
  7. ***************************************************************************/
  8.  
  9. #include "vidhrdw/generic.h"
  10.  
  11. static void draw_background( struct osd_bitmap *bitmap ) {
  12.     int offs;
  13.     const struct GfxElement *gfx = Machine->gfx[1];
  14.  
  15.     for( offs = 0; offs < videoram_size; offs += 2 ){
  16.         int offs2 = offs / 2;
  17.         if( dirtybuffer[offs2] ) {
  18.             int data = READ_WORD( &videoram[offs] );
  19.             int numtile = ( data & 0xfff );
  20.             int color = ( data & 0xf000 ) >> 12;
  21.             int sx = ( offs2 % 16 ) * 16;
  22.             int sy = ( offs2 / 16 ) * 16;
  23.  
  24.             dirtybuffer[offs2] = 0;
  25.  
  26.             drawgfx( tmpbitmap,gfx,
  27.                 numtile,
  28.                 color,
  29.                 0,0,
  30.                 sx,sy,
  31.                 0,TRANSPARENCY_NONE,0);
  32.         }
  33.     }
  34.  
  35.     copybitmap( bitmap, tmpbitmap,0,0,0,0,&Machine->drv->visible_area,TRANSPARENCY_NONE,0 );
  36. }
  37.  
  38. static void draw_text( struct osd_bitmap *bitmap ) {
  39.     int offs;
  40.     const struct rectangle *clip = &Machine->drv->visible_area;
  41.  
  42.     for ( offs = 0; offs < 0x800; offs += 2 ) {
  43.         unsigned short data = READ_WORD( &colorram[offs] );
  44.         int tile_number = data&0x3ff;
  45.  
  46.         if ( tile_number != 0xd ) {
  47.             int color = data>>10;
  48.             int sx = 8 * ( ( offs >> 1 ) % 32 );
  49.             int sy = 8 * ( ( offs >> 1 ) / 32 );
  50.  
  51.             drawgfx( bitmap,Machine->gfx[0],
  52.                 tile_number,
  53.                 color,
  54.                 0,0, /* no flip */
  55.                 sx,sy,
  56.                 clip,TRANSPARENCY_PEN,0x3);
  57.         }
  58.     }
  59. }
  60.  
  61. static void draw_sprites( struct osd_bitmap *bitmap ){
  62.     const struct rectangle *clip = &Machine->drv->visible_area;
  63.     const struct GfxElement *gfx = Machine->gfx[2];
  64.     int offs;
  65.  
  66.     for( offs = spriteram_size - 8; offs >= 0; offs -= 8 ) {
  67.         int data0 = READ_WORD( &spriteram[offs] );
  68.         int data1 = READ_WORD( &spriteram[offs+2] );
  69.         int data2 = READ_WORD( &spriteram[offs+4] );
  70. //      int data3 = READ_WORD( &spriteram[offs+6] );
  71.  
  72.         /*
  73.             -------E YYYYYYYY
  74.             ----BBTT TTTTTTTT
  75.             -CCCCF-X XXXXXXXX
  76.             -------- --------
  77.         */
  78.         if( data0 & 0x100 ) {
  79.             int tile_number = data1 & 0xfff;
  80.             int color   = ( data2 & 0x7800 ) >> 11;
  81.             int sy = ( data0 & 0xff );
  82.             int sx = ( data2 & 0x1ff );
  83.             int hflip = ( data2 & 0x0400 );
  84.  
  85.             if ( sx > 256 )
  86.                 sx -= 512;
  87.  
  88.             drawgfx( bitmap,gfx,
  89.                 tile_number,
  90.                 color,
  91.                 hflip,0,
  92.                 sx,sy,
  93.                 clip,TRANSPARENCY_PEN,0xf );
  94.         }
  95.     }
  96. }
  97.  
  98. void cabal_vh_screenrefresh( struct osd_bitmap *bitmap, int fullrefresh )
  99. {
  100.     if (palette_recalc())
  101.         memset(dirtybuffer, 1, videoram_size/2);
  102.  
  103.     draw_background( bitmap );
  104.     draw_sprites( bitmap );
  105.     draw_text( bitmap );
  106. }
  107.